了解 Drone 在 Docker 的基础上,可选择 CI 工具比较多,选择 Drone 最主要还是源于其较低的资源开销,以及我也确实不喜欢 Jenkins。 最终目的是在群辉上搭建出一套自动构建 Android App 的 CI 平台。
准备好 Gitea Drone 的使用需要一个 Git 仓库,Drone 支持 Github、Gitlab、Gogs、Bitbucket、Gitea 等,在线的的仓库需要 Drone 部署在公网上。 我暂时没有,所以在 Gogs 和 Gitea 中选择了 Gitea,这也是 Drone 官方推荐的,刚好也满足我在群辉上使用的需求。 在 Gitea -> 「设置」 -> 「应用」 -> 「管理 OAuth2 应用程序」 中创建 drone OAuth 应用程序。 重定向 URL 设置为 http://192.168.192.1:9080/login
用来打通 Drone 与 Gitea。 另外获取到两个参数 CLIENT_ID 和 CLIENT_SECRET,为后面配置环境做准备。
创建容器 本文依旧使用 docker-compose 来创建容器。运行 Drone 共需要两个容器,drone/drone
和 drone/drone-runner-docker
。
drone runner 负责向 drone server 轮询来执行具体的任务,随着 Drone 的版本发展,原本的 drone agent 已经改为 drone runner。 下面是具体的 compose 文件, 也可参考 官网 设置最小的环境参数。
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
version: '3' services: drone-server: image: drone/drone: latest container_name: drone-server restart: always privileged: true volumes: - ./data: /var/lib/drone ports: - "9080:80" - "9443:443" environment: - DRONE_OPEN=true - DRONE_DEBUG=true - DRONE_SERVER_HOST=192.168 .192.1 : 9080 - DRONE_GIT_ALWAYS_AUTH=false - DRONE_GITEA=true - DRONE_GITEA_CLIENT_ID=f9de217a-2835 -4292 -96 c3-14 e550dfd2c5 - DRONE_GITEA_CLIENT_SECRET=MIjqGKSRJxtS4PdXpZ7iulvEBZ83McxaH0m7rp5AgWg= - DRONE_GITEA_SERVER=http: //192.168.192.1:3000 - DRONE_DATABASE_DATASOURCE=/var /lib/drone /drone.sqlite - DRONE_DATABASE_DRIVER=sqlite3 - DRONE_SERVER_PROTO=http - DRONE_RPC_SECRET=b7dd563fac66927c8ca6bb6a777bb723 - DRONE_USER_CREATE=username:benjyair,admin:true - TZ=Asia/ Shanghai - DOCKER_API_VERSION=1.39 drone-runner: image: drone/drone-runner-docker: latest container_name: drone-runner restart: always privileged: true volumes: - /var/run /docker.sock:/var /run/docker .sock ports: - "9000:3000" depends_on: - drone-server environment: - DRONE_DEBUG=true - DRONE_RPC_HOST=192.168 .192.1 : 9080 - DRONE_RPC_SECRET=b7dd563fac66927c8ca6bb6a777bb723 - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=drone-runner - DRONE_SERVER_PROTO=http - DOCKER_API_VERSION=1.39
DOCKER_API_VERSION=1.39
解决 runner 报错问题。
1
deployment: Error response from daemon: client version 1.40 is too new . Maximum supported API version is 1.39
DRONE_RPC_SECRET
可以通过以下命令生成,注意 server 与 runner 的 DRONE_RPC_SECRET 需要一致。
1 2
$ openssl rand -hex 16 b7dd563fac66927c8ca6bb6a777bb723
DRONE_USER_CREATE=username:benjyair,admin:true
创建管理员用户,只有管理员才能打开「Project settings」中的「Trusted」选项。
进入 Shell 开始创建
1 2 3 4 5 6 7 8 9 10
# 1、在 File Station 中上传 docker-compose.yml 文件到 docker 共享文件夹的 drone 目录,
到这里容器就创建好了,去 Docker 套件中检查容器是否创建完成并启动成功,并检查日志中是否存在异常。
初始化 Drone 打开浏览器访问 Drone 服务:http://192.168.192.1:9080/
这里默认会跳转到 Gitea 进行应用授权,授权后返回 Drone 便能看到 Gitea 中创建的仓库。 我们提前在 Gitea 中创建一个 demo 项目,同时在 Drone 中点击 ACTIVATE,runner 会自动为该项目创建对应的 webhook。 接下来提交一个 .drone.yml 配置文件到 Git 仓库,配置中我们只是简单的打印出当前环境信息, 然后用 5 次 ping 模拟延时。提交完成后 Drone 就会自动执行该 pipeline。
.drone.yml
1 2 3 4 5 6 7 8 9
kind : pipeline type : docker name : default steps : - name : busybox image : busybox commands : - env - ping -c 5 www .baidu .com
最后 到这里 Drone 这个轮子就算完成了。